package com.changgou.listener;

import com.alibaba.otter.canal.protocol.CanalEntry;
import com.xpand.starter.canal.annotation.CanalEventListener;
import com.xpand.starter.canal.annotation.DeleteListenPoint;
import com.xpand.starter.canal.annotation.InsertListenPoint;
import com.xpand.starter.canal.annotation.UpdateListenPoint;

import java.util.List;

/**
 * @Author: wzw
 * @Date: 2020/12/12 22:30
 * @version: 1.8
 */
@CanalEventListener
public class CanalDataEnventListener {
    /**
     * @author wzw
     * @Description
     * @Date 12:29 2019/10/20
     * @param entryType 监控对数据库操作的事件
     * @param rowData   操作的行数据
     * @return void
     **/
    @InsertListenPoint
    public void onEnventInsert(CanalEntry.EntryType entryType, CanalEntry.RowData rowData){
        //获取事件类型操作行的数据集合
        List<CanalEntry.Column> afterColumnsList = rowData.getAfterColumnsList();

        //循环数据集合
        for (CanalEntry.Column column : afterColumnsList) {
            //列名称
            String name = column.getName();
            //列对应的值
            String value = column.getValue();
            //打印(后面可以做其他操作)
            System.out.println("列名：" + name + "列值：" + value);

        }
    }

    /**
     * @author wzw
     * 修改的参数集合
     * @Date 22:42 2020/12/12
     * @param entryType 监控对数据库操作的事件
     * @param rowData   操作的行数据
     * @return void
     **/
    @UpdateListenPoint
    public void onEnventUpdate(CanalEntry.EntryType entryType,CanalEntry.RowData rowData){
        //获取更新前的数据
        List<CanalEntry.Column> beforeColumnsList = rowData.getBeforeColumnsList();
        //循环被修改的数据集
        for (CanalEntry.Column column : beforeColumnsList) {
            //列名
            String name = column.getName();
            //列值
            String value = column.getValue();
            System.out.println("修改前:列名：" + name + "列值：" + value);
        }
        System.out.println("====================更新前后的数据========================");
        //获取修改后的值
        List<CanalEntry.Column> afterColumnsList = rowData.getAfterColumnsList();
        //循环遍历
        for (CanalEntry.Column column : afterColumnsList) {
            //打印(获取列名,获取列值)
            System.out.println("修改后:列名：" + column.getName() + "列值：" + column.getValue());
        }

    }

    /**
     * @author wzw
     * 监控删除的参数集合
     * @Date 22:42 2020/12/12
     * @param entryType 监控对数据库操作的事件
     * @param rowData   操作的行数据
     * @return void
     **/
    @DeleteListenPoint
    public void onEnventDelete(CanalEntry.EntryType entryType,CanalEntry.RowData rowData){
        //获取删除后的数据
        List<CanalEntry.Column> beforeColumnsList = rowData.getBeforeColumnsList();
        //遍历值
        for (CanalEntry.Column column : beforeColumnsList) {
            System.out.println("删除的值:列名：" + column.getName() + "列值：" + column.getValue());
        }

    }
}
